class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        int n = fruits.size();
        int ans = 0;
        unordered_map<int,int> cnt;//水果种类数
        for(int l = 0,r = 0;r < n;r++){
            cnt[fruits[r]]++;
            while(cnt.size()>2){
                auto it = cnt.find(fruits[l]);//找到左边的水果及其数量
                cnt[fruits[l]]--;
                if(cnt[fruits[l]] == 0)cnt.erase(it);//十分关键的一步
                l++;
            }
            ans = max(ans,r-l+1);
        }        
        return ans;
    }
};